package afters

import (
	"errors"
	"smart_home/api/xfyun/depots"
)

type _afterCache struct {
	cache map[string]func(intent *depots.Intent, result *depots.Result)
}

var ac = &_afterCache{
	cache: make(map[string]func(intent *depots.Intent, result *depots.Result)),
}

func registerAfter(prefix string, control func(intent *depots.Intent, result *depots.Result)) error {
	if _, ok := ac.cache[prefix]; ok {
		return errors.New("after 已存在")
	}

	ac.cache[prefix] = control
	return nil
}

func IsExistsAfter(prefix string) bool {
	if _, ok := ac.cache[prefix]; ok {
		return true
	}
	return false
}

func RunAfter(prefix string, intent *depots.Intent, result *depots.Result) error {
	// 没经过云函数处理的
	if len(intent.Data.Result) == 0 {
		return errors.New("没有经过云函数处理")
	}
	// 如果不需要处理
	if !intent.Data.Result[0].IsHandle {
		return errors.New("不需要后处理")
	}
	if fnc, ok := ac.cache[prefix]; ok {
		fnc(intent, result)
		return nil
	}
	return errors.New("after 不存在")
}
